#if !defined(_APP_DEVICE)
#define _APP_DEVICE
#include "app_buffer.h"
#include <pthread.h>

 
#define DEVICE_FILE_NAME "/dev/ttyS1"

typedef struct {
    char *dev_file_name;
    int fd; // 设备文件描述符  靠打开文件获得 用该句柄操作文件
    app_buffer_t *up_buffer;  // 上行数据缓冲区
    app_buffer_t *down_buffer; // 下行数据缓冲区
    pthread_t read_thread;  //从芯片中读取的线程
    int (*post_read)(char *,int) ;  // 读取数据后预处理的函数
    int (*pre_write)(char *,int) ;  // 写入数据前预处理的函数
    long last_write_ts;    // 上次写入时间戳毫秒
    long write_interval_ms; // 写入间隔毫秒
    int is_running;   // 设备是否运行

} app_device_t;


/**
 * 初始化设备 
 */
app_device_t *app_device_init();


/**
 * 启动设备运行
 *  
 *  1 启动上行线路  启动对串口文件的读取  开辟线程 持续对串口文件执行read
 *  2 启动下行线路  启动对mqtt的读取   向消息队列模块注册真实的回调函数
 * 3 改变状态 is_running=1
 */
int app_device_start();


/**
 * 销毁设备
 *  
 */
int app_device_destroy();


#endif // _APP_DEVICE 
